স্প্রিং বুট ক্লায়েন্টে OAuth2 ইন্টিগ্রেশন করা হয় থার্ড-পার্টি API-র সাথে সুরক্ষিত এবং অনুমোদিত (authorized) যোগাযোগের জন্য। নিচে Spring Security OAuth2 ব্যবহার করে ক্লায়েন্ট ইন্টিগ্রেশনের ধাপ এবং উদাহরণ দেখানো হলো:
Spring Initializr
ব্যবহার করে একটি নতুন স্প্রিং বুট প্রজেক্ট তৈরি করুন। নিচের ডিপেনডেন্সি নির্বাচন করুন:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
নিচে উদাহরণ হিসেবে GitHub OAuth2 প্রদানকারী ব্যবহার করা হলো:
spring.security.oauth2.client.registration.github.client-id=your-github-client-id
spring.security.oauth2.client.registration.github.client-secret=your-github-client-secret
spring.security.oauth2.client.registration.github.scope=read:user
spring.security.oauth2.client.registration.github.redirect-uri={baseUrl}/login/oauth2/code/github
spring.security.oauth2.client.provider.github.authorization-uri=https://github.com/login/oauth/authorize
spring.security.oauth2.client.provider.github.token-uri=https://github.com/login/oauth/access_token
spring.security.oauth2.client.provider.github.user-info-uri=https://api.github.com/user
spring.security.oauth2.client.provider.github.user-name-attribute=id
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.web.SecurityFilterChain;
@Configuration
public class SecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests(authorize -> authorize
.requestMatchers("/").permitAll() // পাবলিক পেজ
.anyRequest().authenticated() // বাকি সব পেজে অথেন্টিকেশন লাগবে
)
.oauth2Login(); // OAuth2 Login সাপোর্ট
return http.build();
}
}
OAuth2AuthorizedClientManager
ব্যবহার করে WebClient তৈরি করুন:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.oauth2.client.OAuth2AuthorizedClientManager;
import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository;
import org.springframework.security.oauth2.client.web.OAuth2AuthorizedClientRepository;
import org.springframework.web.reactive.function.client.WebClient;
@Configuration
public class WebClientConfig {
@Bean
public WebClient webClient(OAuth2AuthorizedClientManager authorizedClientManager) {
return WebClient.builder()
.filter(new ServletOAuth2AuthorizedClientExchangeFilterFunction(authorizedClientManager))
.build();
}
@Bean
public OAuth2AuthorizedClientManager authorizedClientManager(
ClientRegistrationRepository clientRegistrationRepository,
OAuth2AuthorizedClientRepository authorizedClientRepository) {
ServletOAuth2AuthorizedClientExchangeFilterFunction oauth2FilterFunction =
new ServletOAuth2AuthorizedClientExchangeFilterFunction(
clientRegistrationRepository, authorizedClientRepository);
return oauth2FilterFunction.getOAuth2AuthorizedClientManager();
}
}
import org.springframework.stereotype.Service;
import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Mono;
@Service
public class GitHubClient {
private final WebClient webClient;
public GitHubClient(WebClient webClient) {
this.webClient = webClient;
}
public Mono<String> getUserProfile() {
return webClient
.get()
.uri("https://api.github.com/user")
.retrieve()
.bodyToMono(String.class);
}
}
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Mono;
@RestController
public class GitHubController {
private final GitHubClient gitHubClient;
public GitHubController(GitHubClient gitHubClient) {
this.gitHubClient = gitHubClient;
}
@GetMapping("/github/profile")
public Mono<String> getGitHubProfile() {
return gitHubClient.getUserProfile();
}
}
http://localhost:8080/github/profile
এ যান।/github/profile
রেসপন্স:{
"login": "your-username",
"id": 123456,
"node_id": "ABCDEF12345",
"avatar_url": "https://avatars.githubusercontent.com/u/123456?v=4",
"name": "Your Name",
"email": "your-email@example.com",
...
}
WebClient
এর মাধ্যমে asynchronous API কল করা সম্ভব।এই পদ্ধতিটি GitHub-এর পাশাপাশি Google, Facebook, এবং অন্য OAuth2 প্রদানকারীদের সাথেও ব্যবহার করা যায়। কেবল
application.properties
-এ প্রাসঙ্গিক কনফিগারেশন পরিবর্তন করুন।
OAuth2 (Open Authorization 2.0) হলো একটি প্রটোকল যা ব্যবহারকারীর ক্রেডেনশিয়াল প্রকাশ না করেই তৃতীয় পক্ষের অ্যাপ্লিকেশনগুলোকে কোনো রিসোর্স (যেমন: API, ডেটা, বা সার্ভিস) অ্যাক্সেস করার অনুমতি দেয়। এটি স্পষ্টতই অথেনটিকেশন এবং অথরাইজেশনের জন্য ব্যবহৃত হয় এবং মূলত টোকেন-ভিত্তিক অথরাইজেশনের মাধ্যমে কাজ করে।
OAuth2 এর প্রধান প্রয়োজন হলো নিরাপদ অথরাইজেশন। কিছু সাধারণ প্রয়োজনীয়তাগুলি হলো:
OAuth2 মূলত চারটি গুরুত্বপূর্ণ রোল নির্ধারণ করে:
OAuth2 কাজ করে একটি Access Token এর মাধ্যমে। নিচে প্রক্রিয়াটি ধাপে ধাপে ব্যাখ্যা করা হলো:
OAuth2 বিভিন্ন প্রয়োজনীয়তার উপর ভিত্তি করে চারটি গ্রান্ট টাইপ সরবরাহ করে:
স্প্রিং বুট ক্লায়েন্টে OAuth2 ব্যবহার করা সহজ এবং এটি Spring Security
এর মাধ্যমে সম্পন্ন হয়। নিচে ধাপে ধাপে OAuth2 ইন্টিগ্রেশনের পদ্ধতি দেখানো হলো:
pom.xml
এ নিচের ডিপেন্ডেন্সি যুক্ত করুন:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-client</artifactId>
</dependency>
application.yml
ফাইলে OAuth2 ক্লায়েন্টের কনফিগারেশন যুক্ত করুন।
spring:
security:
oauth2:
client:
registration:
google:
client-id: YOUR_CLIENT_ID
client-secret: YOUR_CLIENT_SECRET
scope:
- openid
- profile
- email
redirect-uri: "{baseUrl}/login/oauth2/code/google"
authorization-grant-type: authorization_code
provider:
google:
authorization-uri: https://accounts.google.com/o/oauth2/auth
token-uri: https://oauth2.googleapis.com/token
user-info-uri: https://openidconnect.googleapis.com/v1/userinfo
OAuth2 এর জন্য একটি কাস্টম সিকিউরিটি কনফিগারেশন ক্লাস তৈরি করুন।
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.oauth2.client.web.OAuth2LoginAuthenticationFilter;
import org.springframework.security.web.SecurityFilterChain;
@Configuration
public class SecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests()
.anyRequest().authenticated()
.and()
.oauth2Login(); // OAuth2 Login Enable
return http.build();
}
}
RestTemplate
বা WebClient
দিয়ে অ্যাক্সেস টোকেন ব্যবহার করে API অ্যাক্সেস করুন।
import org.springframework.security.oauth2.client.OAuth2AuthorizedClient;
import org.springframework.security.oauth2.client.annotation.RegisteredOAuth2AuthorizedClient;
import org.springframework.security.oauth2.core.OAuth2AccessToken;
import org.springframework.stereotype.Service;
import org.springframework.web.reactive.function.client.WebClient;
@Service
public class ApiService {
private final WebClient webClient;
public ApiService(WebClient.Builder webClientBuilder) {
this.webClient = webClientBuilder.build();
}
public String getProtectedResource(
@RegisteredOAuth2AuthorizedClient("google") OAuth2AuthorizedClient authorizedClient) {
OAuth2AccessToken accessToken = authorizedClient.getAccessToken();
return webClient.get()
.uri("https://api.example.com/protected-resource")
.headers(headers -> headers.setBearerAuth(accessToken.getTokenValue()))
.retrieve()
.bodyToMono(String.class)
.block();
}
}
OAuth2 ব্যবহারকারীর অথেনটিকেশন এবং অথরাইজেশন প্রক্রিয়াকে সহজ, নিরাপদ এবং স্ট্যান্ডার্ড করে। স্প্রিং বুট ক্লায়েন্টে OAuth2 ইন্টিগ্রেশন সহজ এবং কার্যকর। এটি ব্যবহার করে তৃতীয় পক্ষের API এবং সিস্টেমের সাথে নিরাপদ অথরাইজেশন নিশ্চিত করা যায়।
Spring Boot ক্লায়েন্টে OAuth2 এর মাধ্যমে Access Token সংগ্রহ করা একটি সাধারণ কাজ, বিশেষত যখন API সুরক্ষিত থাকে এবং অ্যাক্সেসের জন্য টোকেন প্রয়োজন হয়। নিচে একটি উদাহরণসহ ধাপে ধাপে প্রক্রিয়াটি ব্যাখ্যা করা হলো।
ডিপেনডেন্সি যোগ করুন Spring Security এবং OAuth2 ক্লায়েন্ট লাইব্রেরি যোগ করুন।
Maven Dependency:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-client</artifactId>
</dependency>
Application Properties বা YAML ফাইল কনফিগার করুন OAuth2 প্রোভাইডার সম্পর্কিত তথ্য সেট করুন। যেমন, ক্লায়েন্ট আইডি, সিক্রেট, এবং টোকেন ইউআরএল।
application.properties:
spring.security.oauth2.client.registration.my-client.client-id=your-client-id
spring.security.oauth2.client.registration.my-client.client-secret=your-client-secret
spring.security.oauth2.client.registration.my-client.authorization-grant-type=client_credentials
spring.security.oauth2.client.registration.my-client.scope=read,write
spring.security.oauth2.client.provider.my-client.token-uri=https://auth-server.com/oauth/token
ব্যাখ্যা:
client-id
: OAuth প্রোভাইডার থেকে প্রাপ্ত ক্লায়েন্ট আইডি।client-secret
: OAuth প্রোভাইডার থেকে প্রাপ্ত সিক্রেট।authorization-grant-type
: সাধারণত client_credentials
।token-uri
: টোকেন সংগ্রহ করার জন্য ইউআরএল।RestTemplate বা WebClient ব্যবহার করে Access Token সংগ্রহ করুন
RestTemplate ব্যবহার করে:
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpMethod;
import java.util.Base64;
import java.util.HashMap;
import java.util.Map;
@Service
public class OAuth2TokenService {
private final RestTemplate restTemplate;
public OAuth2TokenService(RestTemplate restTemplate) {
this.restTemplate = restTemplate;
}
public String getAccessToken() {
String url = "https://auth-server.com/oauth/token";
// Basic Authentication Header
String clientId = "your-client-id";
String clientSecret = "your-client-secret";
String credentials = clientId + ":" + clientSecret;
String encodedCredentials = Base64.getEncoder().encodeToString(credentials.getBytes());
HttpHeaders headers = new HttpHeaders();
headers.add("Authorization", "Basic " + encodedCredentials);
headers.add("Content-Type", "application/x-www-form-urlencoded");
Map<String, String> body = new HashMap<>();
body.put("grant_type", "client_credentials");
HttpEntity<Map<String, String>> request = new HttpEntity<>(body, headers);
ResponseEntity<Map> response = restTemplate.exchange(url, HttpMethod.POST, request, Map.class);
return response.getBody().get("access_token").toString();
}
}
WebClient ব্যবহার করে:
import org.springframework.web.reactive.function.client.WebClient;
import org.springframework.stereotype.Service;
import reactor.core.publisher.Mono;
@Service
public class OAuth2TokenService {
private final WebClient webClient;
public OAuth2TokenService(WebClient.Builder webClientBuilder) {
this.webClient = webClientBuilder.baseUrl("https://auth-server.com").build();
}
public Mono<String> getAccessToken() {
return webClient.post()
.uri("/oauth/token")
.headers(headers -> {
headers.setBasicAuth("your-client-id", "your-client-secret");
headers.setContentType(org.springframework.http.MediaType.APPLICATION_FORM_URLENCODED);
})
.bodyValue("grant_type=client_credentials")
.retrieve()
.bodyToMono(Map.class)
.map(response -> response.get("access_token").toString());
}
}
Spring Security OAuth2 Client (Auto-Configuration ব্যবহার): Spring Security-এর OAuth2 Client ব্যবহার করলে Spring নিজেই টোকেন সংগ্রহ করতে পারে।
Service Class উদাহরণ:
import org.springframework.security.oauth2.client.OAuth2AuthorizedClient;
import org.springframework.security.oauth2.client.OAuth2AuthorizedClientManager;
import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository;
import org.springframework.security.oauth2.client.web.reactive.function.client.ServerOAuth2AuthorizedClientExchangeFilterFunction;
import org.springframework.stereotype.Service;
import org.springframework.web.reactive.function.client.WebClient;
@Service
public class ApiService {
private final WebClient webClient;
public ApiService(OAuth2AuthorizedClientManager authorizedClientManager) {
this.webClient = WebClient.builder()
.filter(new ServerOAuth2AuthorizedClientExchangeFilterFunction(authorizedClientManager))
.build();
}
public Mono<String> fetchData() {
return webClient.get()
.uri("https://api.example.com/protected-resource")
.retrieve()
.bodyToMono(String.class);
}
}
Access Token সংগ্রহের পর এটি HTTP Header-এ পাঠিয়ে API কল করা হয়।
public String fetchData(String accessToken) {
HttpHeaders headers = new HttpHeaders();
headers.add("Authorization", "Bearer " + accessToken);
HttpEntity<String> entity = new HttpEntity<>(headers);
String apiUrl = "https://api.example.com/protected-resource";
ResponseEntity<String> response = restTemplate.exchange(apiUrl, HttpMethod.GET, entity, String.class);
return response.getBody();
}
Spring Boot-এ OAuth2 Access Token সংগ্রহের জন্য:
RestTemplate
বা WebClient
ব্যবহার করুন।এটি নিরাপদ অ্যাপ্লিকেশন তৈরির একটি গুরুত্বপূর্ণ অংশ।
OAuth2 হল একটি ইন্ডাস্ট্রি-স্ট্যান্ডার্ড প্রোটোকল যা সিকিউরড অথরাইজেশন মেকানিজম প্রদান করে। Spring Boot-এ OAuth2 ইন্টিগ্রেশন সহজে করা যায় Spring Security ফ্রেমওয়ার্ক ব্যবহার করে। এটি ব্যবহার করে আপনার অ্যাপ্লিকেশন থার্ড-পার্টি প্রোভাইডার (যেমন Google, GitHub, Facebook) থেকে অথেন্টিকেশন এবং অথরাইজেশন পেতে পারে।
Spring Boot অ্যাপ্লিকেশনে OAuth2 ইন্টিগ্রেশনের ধাপগুলো নিম্নরূপ:
Spring Initializer (start.spring.io) ব্যবহার করে প্রজেক্ট তৈরি করুন। নিচের ডিপেন্ডেন্সিগুলি যোগ করুন:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-client</artifactId>
</dependency>
</dependencies>
application.properties
বা application.yml
ফাইলে কনফিগারেশন:spring.security.oauth2.client.registration.google.client-id=YOUR_GOOGLE_CLIENT_ID
spring.security.oauth2.client.registration.google.client-secret=YOUR_GOOGLE_CLIENT_SECRET
spring.security.oauth2.client.registration.google.redirect-uri={baseUrl}/login/oauth2/code/google
spring.security.oauth2.client.registration.google.scope=openid,profile,email
spring.security.oauth2.client.registration.google.authorization-grant-type=authorization_code
spring.security.oauth2.client.registration.google.client-name=Google
spring.security.oauth2.client.provider.google.authorization-uri=https://accounts.google.com/o/oauth2/auth
spring.security.oauth2.client.provider.google.token-uri=https://oauth2.googleapis.com/token
spring.security.oauth2.client.provider.google.user-info-uri=https://www.googleapis.com/oauth2/v3/userinfo
spring.security.oauth2.client.provider.google.jwk-set-uri=https://www.googleapis.com/oauth2/v3/certs
spring.security.oauth2.client.provider.google.user-name-attribute=sub
উদাহরণে Google ব্যবহার করা হয়েছে। আপনি GitHub, Facebook ইত্যাদিও কনফিগার করতে পারেন।
Spring Security কনফিগারেশনে OAuth2 Login সেটআপ করতে হবে।
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.web.SecurityFilterChain;
@Configuration
public class SecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/", "/login").permitAll() // Public URL
.anyRequest().authenticated() // Secure All Other URLs
.and()
.oauth2Login() // Enable OAuth2 Login
.defaultSuccessUrl("/welcome", true); // Redirect after successful login
return http.build();
}
}
OAuth2 অথেন্টিকেশনের পরে ইউজার ডেটা রিসিভ করতে Principal
ব্যবহার করা হয়।
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.security.oauth2.core.user.OAuth2User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class OAuth2Controller {
@GetMapping("/")
public String index() {
return "index"; // একটি সাধারণ হোম পেজ
}
@GetMapping("/welcome")
public String welcome(@AuthenticationPrincipal OAuth2User user, Model model) {
model.addAttribute("name", user.getAttribute("name"));
model.addAttribute("email", user.getAttribute("email"));
return "welcome"; // ইউজারের তথ্য দেখানোর জন্য পেজ
}
}
index.html
:<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Home</title>
</head>
<body>
<h1>Welcome to Spring Boot OAuth2</h1>
<a href="/oauth2/authorization/google">Login with Google</a>
</body>
</html>
welcome.html
:<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Welcome</title>
</head>
<body>
<h1>Welcome, ${name}</h1>
<p>Your email: ${email}</p>
<a href="/logout">Logout</a>
</body>
</html>
http://localhost:8080
এ যান।authorization_code
, implicit
, password
, বা client_credentials
।Spring Boot-এর মাধ্যমে OAuth2 ইন্টিগ্রেশন সহজ এবং কার্যকর। এটি আপনার অ্যাপ্লিকেশনকে সিকিউর অথেন্টিকেশন মডেলে উন্নীত করতে সহায়তা করে। যদি আপনার নির্দিষ্ট প্রয়োজন বা সমস্যার জন্য সাহায্য দরকার হয়, জানাবেন! 😊
স্প্রিং বুট ক্লায়েন্টে OAuth2 ব্যবহার করে API-এর সাথে সুরক্ষিত যোগাযোগ স্থাপন করতে হলে নির্দিষ্ট কনফিগারেশন এবং টুল ব্যবহার করতে হয়। OAuth2 ইনটিগ্রেশনের জন্য স্প্রিং সিকিউরিটির spring-boot-starter-oauth2-client
ডিপেনডেন্সি ব্যবহার করা হয়। এখানে উদাহরণসহ OAuth2 ইন্টিগ্রেশনের সম্পূর্ণ প্রক্রিয়া দেখানো হলো।
pom.xml
-এ OAuth2 ক্লায়েন্টের জন্য নিচের ডিপেনডেন্সি যুক্ত করুন:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-client</artifactId>
</dependency>
Gradle ব্যবহার করলে:
implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'
application.yml
বা application.properties
ফাইলে OAuth2 কনফিগারেশন যুক্ত করুন। এখানে আমরা Google-এর OAuth2 ব্যবহার করছি উদাহরণ হিসেবে:
spring:
security:
oauth2:
client:
registration:
google:
client-id: YOUR_CLIENT_ID
client-secret: YOUR_CLIENT_SECRET
scope:
- openid
- profile
- email
redirect-uri: "{baseUrl}/login/oauth2/code/{registrationId}"
authorization-grant-type: authorization_code
client-authentication-method: basic
provider:
google:
authorization-uri: https://accounts.google.com/o/oauth2/v2/auth
token-uri: https://oauth2.googleapis.com/token
user-info-uri: https://openidconnect.googleapis.com/v1/userinfo
spring.security.oauth2.client.registration.google.client-id=YOUR_CLIENT_ID
spring.security.oauth2.client.registration.google.client-secret=YOUR_CLIENT_SECRET
spring.security.oauth2.client.registration.google.scope=openid,profile,email
spring.security.oauth2.client.registration.google.redirect-uri={baseUrl}/login/oauth2/code/{registrationId}
spring.security.oauth2.client.registration.google.authorization-grant-type=authorization_code
spring.security.oauth2.client.registration.google.client-authentication-method=basic
spring.security.oauth2.client.provider.google.authorization-uri=https://accounts.google.com/o/oauth2/v2/auth
spring.security.oauth2.client.provider.google.token-uri=https://oauth2.googleapis.com/token
spring.security.oauth2.client.provider.google.user-info-uri=https://openidconnect.googleapis.com/v1/userinfo
স্প্রিং সিকিউরিটির OAuth2AuthorizedClientService ব্যবহার করে টোকেন ফেচ করা হয় এবং এটি হেডারে যোগ করে API কল করা যায়।
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.oauth2.client.OAuth2AuthorizedClient;
import org.springframework.security.oauth2.client.OAuth2AuthorizedClientService;
import org.springframework.security.oauth2.client.annotation.RegisteredOAuth2AuthorizedClient;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
@Service
public class OAuth2RestTemplateClient {
@Autowired
private OAuth2AuthorizedClientService authorizedClientService;
public String getProtectedResource(@RegisteredOAuth2AuthorizedClient("google") OAuth2AuthorizedClient authorizedClient) {
String accessToken = authorizedClient.getAccessToken().getTokenValue();
RestTemplate restTemplate = new RestTemplate();
String url = "https://api.example.com/protected-resource";
HttpHeaders headers = new HttpHeaders();
headers.setBearerAuth(accessToken);
HttpEntity<String> entity = new HttpEntity<>(headers);
return restTemplate.exchange(url, HttpMethod.GET, entity, String.class).getBody();
}
}
WebClient-এ ServerOAuth2AuthorizedClientExchangeFilterFunction ব্যবহার করে সিম্পল পদ্ধতিতে OAuth2 টোকেন যোগ করা যায়।
import org.springframework.security.oauth2.client.web.reactive.function.client.ServerOAuth2AuthorizedClientExchangeFilterFunction;
import org.springframework.stereotype.Service;
import org.springframework.web.reactive.function.client.WebClient;
@Service
public class OAuth2WebClient {
private final WebClient webClient;
public OAuth2WebClient(WebClient.Builder webClientBuilder,
ServerOAuth2AuthorizedClientExchangeFilterFunction oauth2Client) {
this.webClient = webClientBuilder
.apply(oauth2Client.oauth2Configuration())
.baseUrl("https://api.example.com")
.build();
}
public String getProtectedResource() {
return webClient
.get()
.uri("/protected-resource")
.retrieve()
.bodyToMono(String.class)
.block();
}
}
একটি কন্ট্রোলার তৈরি করুন যা OAuth2 সুরক্ষিত API কল করবে:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class OAuth2Controller {
@Autowired
private OAuth2RestTemplateClient restTemplateClient;
@Autowired
private OAuth2WebClient webClient;
@GetMapping("/use-resttemplate")
public String callUsingRestTemplate() {
return restTemplateClient.getProtectedResource(null);
}
@GetMapping("/use-webclient")
public String callUsingWebClient() {
return webClient.getProtectedResource();
}
}
OAuth2 ইনটিগ্রেশন করার পর /login
এ যাওয়ার মাধ্যমে আপনি OAuth2 প্রদানকারী (যেমন: Google) এর লগইন পেজে রিডিরেক্ট হবেন।
এইভাবে আপনি স্প্রিং বুট ক্লায়েন্টে OAuth2 ইন্টিগ্রেশন করতে পারবেন এবং সুরক্ষিত API-এর সাথে যোগাযোগ করতে পারবেন।
Read more